#include "LQ_STM.h"
#include "LQ_UART.h"
#include "LQ_GPIO_LED.h"
#include "LQ_PWM_BLDC.h"
#include <stdio.h>
#include "include.h"
#include "LQ_Display.h"
#include "Bluetooh_Control.h"


void Bluetooth_Char(void)
{
    uint8 bitGet;
    //unsigned char cnt = 0;
    GPIO_LED_Init();    //LED初始化
    Display_Init();
    Display_CLS(U16_BLACK);

    //UART初始化
    //UART_InitConfig(UART0_RX_P14_1, UART0_TX_P14_0, 115200);

    //仅UART0口可以使用，其余在蓝牙模块上无使用
    /*
    UART_InitConfig(UART1_RX_P02_3, UART1_TX_P02_2, 9600);
    UART_InitConfig(UART2_RX_P14_3, UART2_TX_P14_2, 19200);
    UART_InitConfig(UART3_RX_P00_1, UART3_TX_P00_0, 115200);
    */

    /*
     * 蓝牙收发主循环，仅限调试使用，在主函数中请使用Bluetooh_Control函数，否则程序会陷入死循环。
     * 同时可用于远程控制车辆运行进程卡死，在无法正确调用其他函数的时候，紧急情况下可以使用此函数卡死进程。
     */
    Delay_Ms(10);
    bitGet = UART_GetChar(UART0);
    Display_CLS(U16_RED);
    while (1)
    {
        if(bitGet == 'I')
        {
            break;
        }
    }
}


/*
 *蓝牙收发控制，用于车辆蓝牙控制
 *包含了控制车辆停止的程序（死循环卡死方法）
 *摄像头二值化后数据在屏幕上显示
 **************************************
 *此程序仅用于蓝牙模块的使用熟悉
 *
 *
 *
 *
 */


void Bluetooh_Control(void)
{
        GPIO_LED_Init();    //LED初始化
        Display_Init();
        Display_CLS(U16_WHITE);
        uint8 bit;

        //UART初始化
        UART_InitConfig(UART0_RX_P14_1, UART0_TX_P14_0, 115200);



        while(1)
        {
            bit = 'x';
            for(int i = 0; i < UART_GetCount(UART0); i++)
            {
                bit = UART_GetChar(UART0);
            }
            Display_CLS(U16_WHITE);
            sprintf(&bit,"%c");
            Display_showString(0,0,&bit,U16_WHITE,U16_BLUE,16);
            Delay_Ms(50);

            //如果收到I字母则停止车辆
            if(bit == 'A')
            {
                char a[20];
                //停止电机函数
                LQ_BLDCStop();
                Display_CLS(U16_RED);
                sprintf(a,"STOP!");
                Display_showString(0,0,&a,U16_WHITE,U16_BLUE,16);
                //如果1.5秒后编码器传回值不为0，则强行卡死程序，需要根据实例中使用的编码器接口来定义判断条件
                Delay_Ms(1500);
                if(ENC_GetCounter(ENC1_InPut_P33_7) != 0 || ENC_GetCounter(ENC2_InPut_P02_8) != 0 || ENC_GetCounter(ENC3_InPut_P10_3) || ENC_GetCounter(ENC4_InPut_P20_3))
                {
                    Bluetooth_Char();
                }
            }
            //字符B则启动摄像头显示在屏幕上
            if(bit == 'B')
            {
                Test_CAMERA();
            }
            //字符C启动导航模块测试程序
            if(bit == 'C')
            {
                Test_BD1202();
            }
            //字符D则启动舵机控制程序
            if(bit == 'D')
            {
                TestServo();
            }
            //字符E则启动电机程序
            if(bit == 'E')
            {
                TestMotorBLDC();
            }
        }

}

